﻿package source
{
    import flash.filters.BlurFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
	import net.flashpunk.Engine;
	import net.flashpunk.FP;
    import source.Control.Juego;
	import source.Control.Menu;
	import source.Global;
    import source.Control.Splash;
    import source.Control.Presentacion;
	import net.flashpunk.utils.Input;
	import net.flashpunk.utils.Key;
	    
	public class Main extends Engine {
        public var introduccion:Boolean;
        
        /**
         * Main
         * Constructor
         */
		public function Main():void {
			super(Global.resAncho, Global.resAlto, 60, true); //iniciamos el juego con timestep fijo
			FP.console.enable(); //habilitamos la consola
		}
		
        /**
         * init
         * Funcion que es llamada al iniciarse Main
         */
		override public function init():void {
            introduccion = true; //indicamos que se va a presentar la introducción
            var s:Splash = new Splash(0xFF3366, 0x202020, 30, 120, 30);
            FP.world.add(s);
            s.start(splashComplete);
		}
        
        /**
         * init
         * Funcion que es llamada cada frame, simplemente chequea la pulsación de cualquier tecla para saltarse el spash y la presentación
         */
        override public function update():void {
            super.update();
            if (Input.pressed(Key.ANY) && introduccion) introComplete();
        }
        
        /**
         * splashComplete
         * Es llamada cuando termina el splash de FlashPunk
         */
        public function splashComplete():void {
            var p:Presentacion = new Presentacion(0xFF3366, 0x202020);
            FP.world.add(p);
            p.start(introComplete);
        }
        
        /**
         * introComplete
         * Es llamada cuando se muestra el logo de Explosive Brains y la pantalla del título del juego
         */
        public function introComplete():void {
            //Indicamos que ya se ha presentado la introducción
            introduccion = false;
            
            //Creamos los mundos juego y menu:
            Global.menu = new Menu();
            
            //Cargamos el mundo menu:
			FP.world = Global.menu;
        }
        
        /**
         * focusLost
         * Si el juego pierde el focus, se pausa
         */
        override public function focusLost():void {
            FP.buffer.applyFilter(FP.buffer, new Rectangle(0, 0, FP.width, FP.height), new Point, new BlurFilter()); //emborronamos la pantalla
            Global.bufferPantalla = FP.screen.capture(); //capturamos la pantalla, ya emborronada, para ponerla como fondo del menú de pausa
			FP.world = Global.menu; //cambiamos al world menú
        }
	}
}